МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЕОМ
Лабораторна робота №2
Здисципліни: «Організація обчислювальних процесів в паралельних системах»
На тему: «Обмін даними в ОС UNIX за допомогою неіменованих та іменованих каналів.»
Львів-2014
Мета роботи : Засвоїти принципи роботи неіменованих та іменованих каналів.
Завдання :
Неіменовані канали
1) Написати програму, що породжує синівський процес, який обмінюється інформацією з батьківським. При цьому синівський процес перенаправляє стандартний потік виводу у неіменований канал і передає інформацію батьківському використовуючи функцію printf(). Батьківський процес перенаправляє стандартний потік вводу і отримує інформацію від синівського використовуючи функцію gets().1.2.
Іменовані канали
2) Організувати обмін інформацією між трьома програмами (що працюють одночасно). Дві з них пишуть інформацію в іменований канал, третя зчитує її (при цьому всі повідомлення від першої програми друкуються на екрані, повідомлення від другої програми ігноруються і виводиться інформація про кількість проігнорованих повідомлень).
Теоретичні відомості
Інформація про файли, які використовує процес, входить до складу його системного контексту і зберігається в його блоці керування - PCB. В операційній системі UNІX можна спрощено вважати, що інформація про файли, з якими процес здійснює операції потокового обміну, разом з інформацією про потокові лінії в'язку, що з'єднують процес з іншими процесами і пристроями вводу-виводу, зберігається в деякому масиві, що одержав назву таблиці відкритих файлів (таблиці файлових дескрипторів).Індекс елемента цього масиву, що відповідає визначеному потоку вводу-виводу, одержав назву файлового дескриптора для цього потоку. Таким чином, файловий дескриптор являє собою не велике ціле число, що для поточного процесу в даний момент часу однозначно визначає деякий діючий канал вводу-виводу. Деякі файловідескриптори на етапі старту будь-якої програми асоціюються зі стандартними потоками вводу-виводу. Так, наприклад, файловий дескриптор 0 відповідає стандартному потоку вводу, файловий дескриптор 1 - стандартному потоку виводу, файловий дескриптор 2 - стандартному потоку для виводу помилок. У нормальному інтерактивному режимі роботи стандартний потік вводу зв'язує процесс із клавіатурою, а стандартні потоки виводу і виводу помилок - з поточним терміналом.
Файловий дескриптор використовується як параметр, що описує потік вводу-виводу, для системних викликів, що виконують операції над цим потоком. Тому перш ніж робити операції читання даних з файлу і запису їх у файл, ми повинні помістити інформацію про файл у таблицю відкритих файлів і визначити відповідний файловий дескриптор. Для цього застосовується процедура відкриття файлу, здійснювана системним викликом open().
Після завершення потокових операцій процес повинен виконати операцію закриття потоку вводу-виводу, під час якої відбудеться остаточне скидання буферів на лінії зв'язку, звільняться виділені ресурси операційної системи. При цьому елемент таблиці відкритих файлів, що відповідає файловому дескриптору, буде позначений як вільний. За ці дії відповідає системний виклик close(). Треба відзначити, що при завершенні роботипроцесу за допомогою явного чи неявного виклику функці їexіt() відбувається автоматичнее закриття усіх відкритих потоків вводу-виводу.
Найбільш простим способом для передачі інформації за допомогою потокової моделі між різними процессами чи навіть всередині одного процесу в операційній системі UNIX є pіpe (канал, труба, конвеєр).
Важлива відмінність pіp'а від файлу полягає в тім, що прочитана інформація негайно видаляється з нього і не може бути прочитана повторно.
Системний виклик open призначений для виконання операції відкриття файлу і, у випадку його вдалого здійснення, повертає файловий дескриптор відкритого файлу.
Системні виклики dup і dup2 створюють копію файлового дескриптора.
Системний виклик wrіte призначений для здійснення потокових опера...